program rand_mode;

class packet;
    rand byte addr;
    rand byte data;   
endclass

initial begin
    packet pkt;
    pkt = new();
    
    // disable rand_mode of addr variable of pkt
    pkt.addr.rand_mode(0);
    $display("\taddr.rand_mode() = %0d \t data.rand_mode() = %0d", pkt.addr.rand_mode(), pkt.data.rand_mode());

    // calling randomize method
    for (int i = 0; i < 5; ++i) begin
        pkt.randomize();
        $display("\taddr = %0d \t\t data = %0d", pkt.addr, pkt.data);
    end

    // enable rand_mode of addr variable of pkt
    pkt.addr.rand_mode(1);
    // disable rand_mode of data variable of pkt
    pkt.data.rand_mode(0);
    $display("\taddr.rand_mode() = %0d \t data.rand_mode() = %0d", pkt.addr.rand_mode(), pkt.data.rand_mode());
    // calling randomize method
    for (int i = 0; i < 5; ++i) begin
        pkt.randomize();
        $display("\taddr = %0d \t\t data = %0d", pkt.addr, pkt.data);
    end

    // disable rand_mode of object
    pkt.rand_mode(0);
    $display("\taddr.rand_mode() = %0d \t data.rand_mode() = %0d", pkt.addr.rand_mode(), pkt.data.rand_mode());
    for (int i = 0; i < 5; ++i) begin
        pkt.randomize();
        $display("\taddr = %0d \t\t data = %0d", pkt.addr, pkt.data);
    end
end

endprogram
